home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 001-025 / disk_008 / src / def.monst.h < prev    next >
C/C++ Source or Header  |  1992-05-06  |  2KB  |  58 lines

  1. /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
  2.  
  3. struct monst {
  4.    struct monst *nmon;
  5.    struct permonst *data;
  6.    unsigned m_id;
  7.    xchar mx,my;
  8.    xchar mdx,mdy;      /* if mdispl then pos where last displayed */
  9. #define   MTSZ   4
  10.    coord mtrack[MTSZ];   /* monster track */
  11.    schar mhp,orig_hp;
  12.    char mimic;      /* undetected mimic - this is its symbol */
  13.    Bitfield(mdispl,1);   /* mdx,mdy valid */
  14.    Bitfield(minvis,1);   /* invisible */
  15.    Bitfield(cham,1);   /* shape-changer */
  16.    Bitfield(mhide,1);   /* hides beneath objects */
  17.    Bitfield(mundetected,1);   /* not seen in present hiding place */
  18.    Bitfield(mspeed,2);
  19.    Bitfield(msleep,1);
  20.    Bitfield(mfroz,1);
  21.    Bitfield(mconf,1);
  22.    Bitfield(mflee,1);
  23.    Bitfield(mcan,1);   /* has been cancelled */
  24.    Bitfield(mtame,1);      /* implies peaceful */
  25.    Bitfield(mpeaceful,1);   /* does not attack unprovoked */
  26.    Bitfield(isshk,1);   /* is shopkeeper */
  27.    Bitfield(isgd,1);   /* is guard */
  28.    Bitfield(mcansee,1);   /* cansee 1, temp.blinded 0, blind 0 */
  29.    Bitfield(mblinded,7);   /* cansee 0, temp.blinded n, blind 0 */
  30.    Bitfield(mtrapped,1);   /* trapped in a pit or bear trap */
  31.    Bitfield(mnamelth,6);   /* length of name (following mxlth) */
  32. #ifndef NOWORM
  33.    Bitfield(wormno,5);   /* at most 31 worms on any level */
  34. #endif NOWORM
  35.    unsigned mtrapseen;   /* bitmap of traps we've been trapped in */
  36.    long mlstmv;   /* prevent two moves at once */
  37.    struct obj *minvent;
  38.    long mgold;
  39.    unsigned mxlth;      /* length of following data */
  40.    /* in order to prevent alignment problems mextra should
  41.       be (or follow) a long int */
  42.    long mextra[1];      /* monster dependent info */
  43. };
  44.  
  45. #define newmonst(xl)   (struct monst *) alloc((unsigned)(xl) + sizeof(struct monst))
  46.  
  47. extern struct monst *fmon;
  48. #ifndef MKLEV
  49. extern struct monst *fallen_down;
  50. #endif MKLEV
  51. struct monst *m_at();
  52.  
  53. /* these are in mspeed */
  54. #define MSLOW 1 /* slow monster */
  55. #define MFAST 2 /* speeded monster */
  56.  
  57. #define   NAME(mtmp)   (((char *) mtmp->mextra) + mtmp->mxlth)
  58.